
module;
#include <QObject>
#include <QMap>
#include <QString>
#include <QMutex>
#include <QtCore>
#include <QtCore/QPair>
export module GlobalData;

export class GlobalData : public QObject {
    Q_OBJECT

public:
    static GlobalData& instance();

    // 禁止拷贝和赋值
    GlobalData(GlobalData const&) = delete;
    void operator=(GlobalData const&) = delete;

    // 设置第一个 QMap 的值
    Q_INVOKABLE void setMap1Value(const QString &key, const QVariant &value);

    // 获取第一个 QMap 的值
    Q_INVOKABLE QVariant getMap1Value(const QString &key);

    // 遍历 map1 的值
    Q_INVOKABLE QList<QPair<QString, QVariant>> getAllMap1Values() const;

    // 设置第二个 QMap 的值
    Q_INVOKABLE void setMap2Value(const QString &key, const QVariant &value);

    // 获取第二个 QMap 的值
    Q_INVOKABLE QVariant getMap2Value(const QString &key);

    // 遍历 map2 的值
    Q_INVOKABLE QList<QPair<QString, QVariant>> getAllMap2Values() const;

    // 设置第三个 QMap 的值
    Q_INVOKABLE void setMap3Value(const QString &key, const QVariant &value);

    // 获取第三个 QMap 的值
    Q_INVOKABLE QVariant getMap3Value(const QString &key);

    // 遍历 map3 的值
    Q_INVOKABLE QList<QPair<QString, QVariant>> getAllMap3Values() const;

signals:
    void map1Changed(const QMap<QString, QVariant> &wDataMap);
public slots:
    void setMap1ValueSlot(const QString &key, const QVariant &value);//设置map1的槽方法

private:
    GlobalData() {} // 私有构造函数

    QMap<QString, QVariant> map1; // 第一个 QMap
    QMap<QString, QVariant> map2; // 第二个 QMap
    QMap<QString, QVariant> map3; // 第三个 QMap

    mutable QMutex mutex1; // 保护第一个 QMap 的互斥锁
   mutable QMutex mutex2; // 保护第二个 QMap 的互斥锁
   mutable QMutex mutex3; // 保护第三个 QMap 的互斥锁
};



